package org.mall.modules.pay.service;

import org.mall.common.api.vo.CommonResult;
import org.mall.modules.pay.dataobject.PayTransactionDO;
import org.mall.modules.pay.dataobject.PayTransactionExtensionDO;
import org.mall.modules.pojo.pay.transaction.*;

import java.util.Collection;
import java.util.List;

public interface PayTransactionService {

    PayTransactionDO getTransaction(Integer id);

    int updateTransactionPriceTotalIncr(Integer id, Integer incr);

    PayTransactionBO getTransaction(PayTransactionGetDTO payTransactionGetDTO);

    PayTransactionBO createTransaction(PayTransactionCreateDTO payTransactionCreateDTO);

    PayTransactionSubmitBO submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO);

    /**
     * 更新交易支付成功
     *
     * 该接口用于不同支付平台，支付成功后，回调该接口
     *
     * @param payChannel 支付渠道
     * @param params 回调参数。
     *               因为不同平台，能够提供的参数不同，所以使用 String 类型统一接收，然后在使用不同的 AbstractPaySDK 进行处理。
     * @return 是否支付成功
     */
    Boolean updateTransactionPaySuccess(Integer payChannel, String params);

    List<PayTransactionBO> getTransactionList(Collection<Integer> ids);

    PayTransactionPageBO getTransactionPage(PayTransactionPageDTO payTransactionPageDTO);

    CommonResult cancelTransaction(); // TODO 1. params 2. result

    PayTransactionDO selectById(Integer id);

    boolean closeExpireTransaction();

    PayTransactionBO getTransactionByOrderId(String valueOf);

    PayTransactionExtensionDO getTransactionExtensionByIdAndStatus(Integer extensionId,Integer value);

}
